package com.hfb.mashibing.alip8.juc;

import java.util.concurrent.ConcurrentSkipListMap;

/**
 * ConcurrentSkipListMap 的源码分析
 * ConcurrentSkipListMap是线程安全的有序的哈希表，适用于高并发的场景。
 * ConcurrentSkipListMap和TreeMap，它们虽然都是有序的哈希表。但是，第一，它们的线程安全机制不同，TreeMap是非线程安全的，而ConcurrentSkipListMap是线程安全的。第二，ConcurrentSkipListMap是通过跳表实现的，而TreeMap是通过红黑树实现的。
 *
 * 在4线程1.6万数据的条件下，ConcurrentHashMap 存取速度是ConcurrentSkipListMap 的4倍左右。
 *
 * 但ConcurrentSkipListMap有几个ConcurrentHashMap 不能比拟的优点：
 * 1、ConcurrentSkipListMap 的key是有序的。
 * 2、ConcurrentSkipListMap 支持更高的并发。ConcurrentSkipListMap 的存取时间是log（N），和线程数几乎无关。也就是说在数据量一定的情况下，并发的线程越多，ConcurrentSkipListMap越能体现出他的优势。
 * 在非多线程的情况下，应当尽量使用TreeMap。此外对于并发性相对较低的并行程序可以使用Collections.synchronizedSortedMap将TreeMap进行包装，也可以提供较好的效率。对于高并发程序，应当使用ConcurrentSkipListMap，能够提供更高的并发度。
 * 所以在多线程程序中，如果需要对Map的键值进行排序时，请尽量使用ConcurrentSkipListMap，可能得到更好的并发度。
 * 注意，调用ConcurrentSkipListMap的size时，由于多个线程可以同时对映射表进行操作，所以映射表需要遍历整个链表才能返回元素个数，这个操作是个O(log(n))的操作。
 *      ————https://cloud.tencent.com/developer/article/1803797
 */
public class MyConcurrentSkipListMap {
    private ConcurrentSkipListMap map = new ConcurrentSkipListMap();

    public static void main(String[] args) {

    }
}
